package com.example.service.impl;
import com.example.entity.Organizations;
import com.example.dao.OrganizationDao;
import com.example.dao.VolunteerDao;
import com.example.dao.UsersDao;
import com.example.entity.Organization;
import com.example.entity.Users;
import com.example.entity.Volunteer;
import com.example.service.UsersService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 用户服务实现类
 * 实现用户相关的业务逻辑操作，包括用户管理、注册等功能
 * 使用@Transactional注解确保方法的事务性
 */
@Service
@Transactional
public class UsersServiceImpl implements UsersService {

    @Autowired
    private UsersDao usersDao; // 操作用户数据的DAO

    @Autowired
    private VolunteerDao volunteerDao; // 操作志愿者数据的DAO

    @Autowired
    private OrganizationDao organizationDao; // 操作组织数据的DAO

    /**
     * 获取所有用户列表
     * @return 用户列表
     */
    @Override
    public List<Users> getAllUsers() {
        return usersDao.findAll();
    }

    /**
     * 根据用户ID获取用户信息
     * @param userid 用户ID
     * @return 用户对象，未找到返回null
     */
    @Override
    public Users getUsersById(Integer userid) {
        return usersDao.findUsersById(userid);
    }

    /**
     * 添加新用户
     * @param users 用户对象
     * @return 添加成功返回true，失败返回false
     */
    @Override
    public boolean addUsers(Users users) {
        return usersDao.insert(users) > 0;
    }

    /**
     * 更新用户信息
     * @param users 用户对象
     * @return 更新成功返回true，失败返回false
     */
    @Override
    public boolean updateUsers(Users users) {
        return usersDao.update(users) > 0;
    }

    /**
     * 删除用户
     * @param userid 用户ID
     * @return 删除成功返回true，失败返回false
     */
    @Override
    public boolean deleteUsers(Integer userid) {
        return usersDao.delete(userid) > 0;
    }

    /**
     * 按条件搜索用户
     * @param usernumber 用户编号(可选)
     * @param usertype 用户类型(可选)
     * @return 符合条件的用户列表
     */
    @Override
    public List<Users> searchUsers(@Param("usernumber") String usernumber,
                                   @Param("usertype") String usertype) {
        return usersDao.searchUsers(usernumber, usertype);
    }

    /**
     * 根据用户编号和密码获取用户信息
     * @param usernumber 用户编号
     * @param password 密码
     * @return 匹配的用户对象，未找到返回null
     */
    public Users getUsersByUserNumberAndPassword(String usernumber, String password) {
        return this.usersDao.findByusernumberAndpassword(usernumber, password);
    }

    /**
     * 注册普通用户
     * @param user 用户对象
     * @return 注册成功返回true，失败返回false
     */
    @Override
    public boolean registerUser(Users user) {
        try {
            int rows = usersDao.saveUser(user);
            if (rows > 0) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 注册志愿者用户
     * @param volunteer 志愿者对象
     * @return 注册成功返回true，失败返回false
     */
    @Override
    public boolean registerVolunteer(Volunteer volunteer) {
        try {
            volunteerDao.saveVolunteer(volunteer);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 注册组织用户
     * @param organizations 组织对象
     * @return 注册成功返回true，失败返回false
     */
    @Override
    public boolean registerOrganization(Organization organizations) {
        try {
            organizationDao.saveOrganizations(organizations);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
      @Override
    public Volunteer findVolunteerInfoByUserId(Integer userid) {
        return null;
    }

    @Override
    public Volunteer getVolunteerInfoByUserId(Integer userid) {
        return this.usersDao.findVolunteerInfoByUserId(userid);
    }


    @Override
    public Organizations getOrganizationInfoByUserId(int userid) {
        return this.usersDao.findOrganizationInfoByUserId(userid);
    }
}